Niveles de usuarios PHP y MySQL: Ejemplo Completo
Niveles de usuarios PHP. Este tutorial le ayudara a crear inicio de sesión basado en rol de múltiples usuarios en PHP PDO y con la base de datos MySQL. Nos basaremos en una sola página de inicio de sesión y dentro de esta página se podrá elegir tres niveles: Usuarios, Personal y Administradores.
¿Cómo funciona el script Niveles de usuarios PHP?
Se utilizara un objeto de sesión diferente del nombre del rol de usuario administrador y empleado para que puedan diferenciarlo.
Si el usuario accede con sus credenciales y genera un inicio de sesión en el momento asignable nombre de objeto de sesión diferente e identifique el nombre de rol determinado.
Una vez que la sesión se crea será redirigido pasado 3 segundos a su propia página de inicio y panel de gestión según su rol de usuario.
¿Qué es el inicio de sesión de Niveles de usuarios PHP?
Por ejemplo el rol de «usuario» inicia sesión correctamente y accede a su propia página de inicio. Sin embargo, dentro de su propia página de inicio podrá gestionar sus respectivos roles como asistencias, ventas, etc., según lo asignado.
Ahora, el rol «Administrador» cuando inicia sesión tendrá mas privilegios, como crear usuarios, eliminar usuarios y será el máximo rol dentro del sistema.

Niveles de usuario PHP y MySQL: Paso a Paso
A continuación, veremos una serie de pasos en el cual explicaremos cada detalle del sistema nivel de usuarios.
a) Estructura del directorio del proyecto
Como pueden apreciar les mostrare la estructura de carpetas y archivos del sistema nivel de usuarios y posee lo siguiente:
- 8 archivos en PHP
- Fichero conexión con la base de datos
- Un archivo.sql
- Librería BootStrap

b) La Base de datos / Tabla
La base de datos usara el nombre de «php_multiplelogin
«. Además, dentro de esta base de datos crearemos una tabla con nombre «mainlogin
«, que será el encargado de almacenar todos los usuarios con sus respectivos niveles.
Veamos las consultas del fichero «php_multilogin.sql
»
CREATE TABLE `mainlogin` ( `id` int(11) NOT NULL, `username` varchar(15) CHARACTER SET latin1 NOT NULL, `email` varchar(40) CHARACTER SET latin1 NOT NULL, `password` varchar(20) CHARACTER SET latin1 NOT NULL, `role` varchar(10) CHARACTER SET latin1 NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=COMPACT; INSERT INTO `mainlogin` (`id`, `username`, `email`, `password`, `role`) VALUES (11, 'admin', 'demo@www.baulphp.com', '123456', 'admin'), (12, 'test', 'test@www.baulphp.com', '123456', 'personal'); ALTER TABLE `mainlogin` ADD PRIMARY KEY (`id`); ALTER TABLE `mainlogin` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=15; COMMIT;
c) Fichero DBconect.php
Como su nombre lo dice, este fichero tendrá un papel fundamental y será el encargado de vincular PHP con MySQL usando el tipo de conexión PDO que es muy recomendado para seguridad en el sistema.
<?php $db_host="localhost"; //localhost server $db_user="root"; //database username $db_password=""; //database password $db_name="php_multilogin"; //database name try { $db=new PDO("mysql:host={$db_host};dbname={$db_name}",$db_user,$db_password); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(PDOEXCEPTION $e) { $e->getMessage(); } ?>
d) Fichero index.php: Formulario login
Es el fichero principal del sistema y contendrá el formulario de inicio de sesión y mostrara tres campos básicos para poder iniciar sesión como son: Correo electrónico, Contraseña y Nivel o rol de usuario. Sin embargo, el campo de rol se usara la etiqueta SELECT para forzar al usuario a elegir un rol.
<div class="login-form"> <center><h2>Iniciar sesión</h2></center> <form method="post" class="form-horizontal"> <div class="form-group"> <label class="col-sm-6 text-left">Email</label> <div class="col-sm-12"> <input type="text" name="txt_email" class="form-control" placeholder="Ingrese email" /> </div> </div> <div class="form-group"> <label class="col-sm-6 text-left">Password</label> <div class="col-sm-12"> <input type="password" name="txt_password" class="form-control" placeholder="Ingrese passowrd" /> </div> </div> <div class="form-group"> <label class="col-sm-6 text-left">Seleccionar rol</label> <div class="col-sm-12"> <select class="form-control" name="txt_role"> <option value="" selected="selected"> - selecccionar rol - </option> <option value="admin">Admin</option> <option value="personal">Personal</option> <option value="usuarios">Usuarios</option> </select> </div> </div> <div class="form-group"> <div class="col-sm-12"> <input type="submit" name="btn_login" class="btn btn-success btn-block" value="Iniciar Sesion"> </div> </div> <div class="form-group"> <div class="col-sm-12"> ¿No tienes una cuenta? <a href="registro.php"><p class="text-info">Registrar Cuenta</p></a> </div> </div> </form> </div>
Aqui les dejare el formulario de inicio de sesión PHP:
Código index.php: Procesar el inicio de sesión
– Tendra la gran responsabilidad de iniciar sesión PHP identificando el nombre, la contraseña y el rol específico seleccionado por el usuario.
– Procesara en esta misma pagina si los datos ingreados son correctos para poder crear la sesion y redirigir a las diferentes paginas segun su rol.
<?php require_once 'DBconect.php'; session_start(); if(isset($_SESSION["admin_login"])) //Condicion admin { header("location: admin/admin_portada.php"); } if(isset($_SESSION["personal_login"])) //Condicion personal { header("location: personal/personal_portada.php"); } if(isset($_SESSION["usuarios_login"])) //Condicion Usuarios { header("location: usuarios/usuarios_portada.php"); } if(isset($_REQUEST['btn_login'])) { $email =$_REQUEST["txt_email"]; //textbox nombre "txt_email" $password =$_REQUEST["txt_password"]; //textbox nombre "txt_password" $role =$_REQUEST["txt_role"]; //select opcion nombre "txt_role" if(empty($email)){ $errorMsg[]="Por favor ingrese Email"; //Revisar email } else if(empty($password)){ $errorMsg[]="Por favor ingrese Password"; //Revisar password vacio } else if(empty($role)){ $errorMsg[]="Por favor seleccione rol "; //Revisar rol vacio } else if($email AND $password AND $role) { try { $select_stmt=$db->prepare("SELECT email,password,role FROM mainlogin WHERE email=:uemail AND password=:upassword AND role=:urole"); $select_stmt->bindParam(":uemail",$email); $select_stmt->bindParam(":upassword",$password); $select_stmt->bindParam(":urole",$role); $select_stmt->execute(); //execute query while($row=$select_stmt->fetch(PDO::FETCH_ASSOC)) { $dbemail =$row["email"]; $dbpassword =$row["password"]; $dbrole =$row["role"]; } if($email!=null AND $password!=null AND $role!=null) { if($select_stmt->rowCount()>0) { if($email==$dbemail and $password==$dbpassword and $role==$dbrole) { switch($dbrole) //inicio de sesión de usuario base de roles { case "admin": $_SESSION["admin_login"]=$email; $loginMsg="Admin: Inicio sesión con éxito"; header("refresh:3;admin/admin_portada.php"); break; case "personal"; $_SESSION["personal_login"]=$email; $loginMsg="Personal: Inicio sesión con éxito"; header("refresh:3;personal/personal_portada.php"); break; case "usuarios": $_SESSION["usuarios_login"]=$email; $loginMsg="Usuario: Inicio sesión con éxito"; header("refresh:3;usuarios/usuarios_portada.php"); break; default: $errorMsg[]="correo electrónico o contraseña o rol incorrectos"; } } else { $errorMsg[]="correo electrónico o contraseña o rol incorrectos"; } } else { $errorMsg[]="correo electrónico o contraseña o rol incorrectos"; } } else { $errorMsg[]="correo electrónico o contraseña o rol incorrectos"; } } catch(PDOException $e) { $e->getMessage(); } } else { $errorMsg[]="correo electrónico o contraseña o rol incorrectos"; } } include("header.php"); ?>
e) Fichero registro.php
Este fichero será el encargado de mostrar un formulario HTML5 que tendrá la obligación de capturar los datos del registrante para poder almacenarlo en la base de datos.
Este formulario consta de cuatro campos que son: Nombre de usuario, correo electrónico, contraseña y rol de usuario.
Código HTML5 que muestra el formulario de registro
<div class="login-form"> <center><h2>Registrar</h2></center> <form method="post" class="form-horizontal"> <div class="form-group"> <label class="col-sm-9 text-left">Usuario</label> <div class="col-sm-12"> <input type="text" name="txt_username" class="form-control" placeholder="Ingrese usuario" /> </div> </div> <div class="form-group"> <label class="col-sm-9 text-left">Email</label> <div class="col-sm-12"> <input type="text" name="txt_email" class="form-control" placeholder="Ingrese email" /> </div> </div> <div class="form-group"> <label class="col-sm-9 text-left">Password</label> <div class="col-sm-12"> <input type="password" name="txt_password" class="form-control" placeholder="Ingrese password" /> </div> </div> <div class="form-group"> <label class="col-sm-9 text-left">Seleccione tipo</label> <div class="col-sm-12"> <select class="form-control" name="txt_role"> <option value="" selected="selected"> - seleccione rol - </option> <!--<option value="admin">Admin</option>--> <option value="personal">Personal</option> <option value="usuarios">Usuarios</option> </select> </div> </div> <div class="form-group"> <div class="col-sm-12"> <input type="submit" name="btn_register" class="btn btn-primary btn-block" value="Registro"> <!--<a href="index.php" class="btn btn-danger">Cancel</a>--> </div> </div> <div class="form-group"> <div class="col-sm-12"> ¿Tienes una cuenta? <a href="index.php"><p class="text-info">Inicio de sesión</p></a> </div> </div> </form> </div><!--Cierra div login-->
Formulario de registro PHP visualmente por debajo de este tipo:
Código PHP: Proceso de formulario registro
<?php require_once "DBconect.php"; if(isset($_REQUEST['btn_register'])) //compruebe el nombre del botón "btn_register" y configúrelo { $username = $_REQUEST['txt_username']; //input nombre "txt_username" $email = $_REQUEST['txt_email']; //input nombre "txt_email" $password = $_REQUEST['txt_password']; //input nombre "txt_password" $role = $_REQUEST['txt_role']; //seleccion nombre "txt_role" if(empty($username)){ $errorMsg[]="Ingrese nombre de usuario"; //Compruebe input nombre de usuario no vacío } else if(empty($email)){ $errorMsg[]="Ingrese email"; //Revisar email input no vacio } else if(!filter_var($email, FILTER_VALIDATE_EMAIL)){ $errorMsg[]="Ingrese email valido"; //Verificar formato de email } else if(empty($password)){ $errorMsg[]="Ingrese password"; //Revisar password vacio o nulo } else if(strlen($password) < 6){ $errorMsg[] = "Password minimo 6 caracteres"; //Revisar password 6 caracteres } else if(empty($role)){ $errorMsg[]="Seleccione rol"; //Revisar etiqueta select vacio } else { try { $select_stmt=$db->prepare("SELECT username, email FROM mainlogin WHERE username=:uname OR email=:uemail"); // consulta sql $select_stmt->bindParam(":uname",$username); $select_stmt->bindParam(":uemail",$email); //parámetros de enlace $select_stmt->execute(); $row=$select_stmt->fetch(PDO::FETCH_ASSOC); if($row["username"]==$username){ $errorMsg[]="Usuario ya existe"; //Verificar usuario existente } else if($row["email"]==$email){ $errorMsg[]="Email ya existe"; //Verificar email existente } else if(!isset($errorMsg)) { $insert_stmt=$db->prepare("INSERT INTO mainlogin(username,email,password,role) VALUES(:uname,:uemail,:upassword,:urole)"); //Consulta sql de insertar $insert_stmt->bindParam(":uname",$username); $insert_stmt->bindParam(":uemail",$email); //parámetros de enlace $insert_stmt->bindParam(":upassword",$password); $insert_stmt->bindParam(":urole",$role); if($insert_stmt->execute()) { $registerMsg="Registro exitoso: Esperar página de inicio de sesión"; //Ejecuta consultas header("refresh:2;index.php"); //Actualizar despues de 2 segundo a la portada } } } catch(PDOException $e) { echo $e->getMessage(); } } } include("header.php"); ?>
f) Fichero admin_portada.php
Una vez que el rol «Administrador
» inicia sesión será redirigido a esta página que estará hecha para fines administrativos con diferentes permisos.
<body> <?php include("../header.php");?> <div class="wrapper"> <div class="container"> <div class="col-lg-12"> <center> <h1>Pagina Administrativa</h1> <h3> <?php session_start(); if(!isset($_SESSION['admin_login'])) { header("location: ../index.php"); } if(isset($_SESSION['personal_login'])) { header("location: ../personal/personal_portada.php"); } if(isset($_SESSION['usuarios_login'])) { header("location: ../usuarios/usuarios_portada.php"); } if(isset($_SESSION['admin_login'])) { ?> Bienvenido, <?php echo $_SESSION['admin_login']; } ?> </h3> </center> <a href="../cerrar_sesion.php"><button class="btn btn-danger text-left"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span> Cerrar Sesion</button></a> <hr> </div> <br><br><br> <div class="row"> <div class="col-lg-12"> <div class="panel panel-default"> <div class="panel-heading"> Panel de usuarios </div> <!-- /.panel-heading --> <div class="panel-body"> <div class="table-responsive"> <table class="table table-striped table-bordered table-hover"> <thead> <tr> <th width="4%">ID</th> <th width="18%">Usuario</th> <th width="24%">Email</th> <th width="19%">Rol</th> <th width="24%">Password</th> <th colspan="2">Opciones</th> </tr> </thead> <tbody> <?php require_once '../DBconect.php'; $select_stmt=$db->prepare("SELECT id,username,email,role FROM mainlogin"); $select_stmt->execute(); while($row=$select_stmt->fetch(PDO::FETCH_ASSOC)) { ?> <tr> <td><?php echo $row["id"]; ?></td> <td><?php echo $row["username"]; ?></td> <td><?php echo $row["email"]; ?></td> <td><?php echo $row["role"]; ?></td> <td>*******</td> <td width="4%"><button class="btn btn-primary"><span class="glyphicon glyphicon-edit" aria-hidden="true"></span></button></td> <td width="7%"><button class="btn btn-danger"><span class="glyphicon glyphicon-trash" aria-hidden="true"></span></button></td> </tr> <?php } ?> </tbody> </table> </div> <!-- /.table-responsive --> </div> <!-- /.panel-body --> </div> <!-- /.panel --> </div> </div> </div> </body>

g) Fichero cerrar_sesion.php
Si cualquier usuario que desea salir del sistema y cerrar sesión correctamente con el objeto de sesión, deben hacer clic en el enlace de cierre de sesión llamado «Cerrar sesión
«. Por lo tanto, en ese momento el método «session_destroy()
» destruye el objeto de sesión y se envían a la página de inicio de sesión.
<?php session_start(); header("location:index.php"); // Destruye la sesion actual session_destroy(); ?>
Otros archivos: Niveles de usuarios PHP
I) DBconect.php – En este archivo establecer la conexión de la base de datos desde PHP.
II) Registro.php (formulario de registro) – Nuevo usuario (admin/personal/usuario) se está registrando en este archivo.
III) Admin_portada.php – En este archivo sólo se permite el nombre del rol de administrador.
IV) Personal_portada.php – En este archivo sólo se permite el nombre del rol de administrador de empleados. Este almacén de archivos en la carpeta de empleados.
V) Usuarios_portada.php – en este archivo sólo se permite el nombre del rol de administrador de usuario. Este almacén de archivos en la carpeta de usuario.
CONCLUSION DEL ARTÍCULO
En este artículo hemos aprendido a iniciar sesión con diferentes roles de usuarios usando PHP y MySQL. Además, estos usuarios dispondrán de diferentes permisos para poder gestionar la información del sistema web.
También, se aplicó la conexión recomendada con MySQL, estamos hablando de PHP PDO.
Espero que este ejemplo les ayude en sus proyectos web que estén realizando.
DESCARGAR CODIGO FUENTE
Descargar